import axios from "axios";
import qs from 'qs';

const request = axios.create({
    timeout:1000
});

// 接口使用的服务器 （环境） 开发环境 生产环境 测试环境
console.log(process.env.NODE_ENV);
// 测试环境 test
// 生产环境 production
// 开发环境 development
switch(process.env.NODE_ENV){
    case "test":
        request.defaults.baseURL = 'http://localhost:8000';
        break;
    case "production":
        request.defaults.baseURL = 'http://192.168.110.52:8000';
        break;
    case "development":
        request.defaults.baseURL = '/api';
}


// 服务器 http://localhost:8000
// 客户端 http://localhost:9000
// response.set('Access-Control-Allow-Origin', '*')

// 代理服务器
/* 
跨域  同源策略
同源策略：最早是网景公司提出的一种针对浏览器的安全策略
协议名 域名 端口号 三者一致 同源
有一个不一样不同源  跨域

reset接口  非reset接口
reset接口一个路径可以做多个操作 post get put delete
非reset接口 一个路径只能做一种操作

//  http://localhost:3000/posts




*/
/* 
Access to XMLHttpRequest at 'http://localhost:8000/student_info' from origin 'http://localhost:9000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

一见这个错 跨域了

*/




function ajax({method='get',url,params={},headType=''}){
   
    let data = {};

    if(method.toLowerCase() == 'post'){
        if(headType == 'form'){
            request.defaults.headers['content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
            data = qs.stringify(params);
        }else {
            request.defaults.headers['content-Type'] = 'application/json;charset=utf-8';
            data = params;
        }
    }
    if(method.toLowerCase()=='get'){
        if(headType == 'form'){
            request.defaults.headers['content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
        }
        url = url + '?' + qs.stringify(params);
       

    }
    // 请求拦截器
    const reqInter =  request.interceptors.request.use(config=>{
        console.log('请求拦截器')
        console.log(config);
        return config
    });
    // 响应拦截器
    const resInter = request.interceptors.response.use(data=>{
        console.log('响应拦截')
        console.log(data);

        return data
    })

    



    /* powershell和cmd
    powershell打开方式 在地址栏中输入powershell
    或者在 当前文件夹内 按住shift + 鼠标右击
    
    */
// 取消拦截器  传入的参数为拦截器的名字
    request.interceptors.request.eject(reqInter);
    console.log(resInter);
        // 取消请求拦截器
    request.interceptors.response.eject(resInter);    


    return new Promise((resolve,reject)=>{
        request({
            method,
            url,//url ?key=value&key=value
            data//form 请求序列化 key=value&key=value   普通{}
        }).then(res=>{
            resolve(res);
        }).catch(err=>{
            reject(err);
        })
    })

    
}
export default ajax;


/* 
为何要axios二次封装？优点是什么？
1.代码封装 可以实现复用 减少代码量 降低维护难度
2.统一处理请求头 http相关问题
3. 拦截请求和响应 提前对数据进行处理 

*/

